草庐IT

Java Swingworker 和多线程

全部标签

java - 为什么要在单线程方法中放置同步块(synchronized block)?

我偶然发现了thisarticle在IBM-developerworks上,他们发布的代码让我提出了一些问题:为什么局部变量Map的构建包含在synchronizedblock中?请注意,他们隐含地表示只有一个producer线程。实际上,为什么这个片段需要一个synchronizedblock?volatile变量应该足以完成这项工作,因为新创建的map只有在填满后才会发布。锁对象上只有一个线程同步有什么意义?文章提到:ThesynchronizedblockandthevolatilekeywordinListing1arerequiredbecausenohappens-befo

java - Lucene IndexWriter线程安全

Lucene鼓励从多个线程中重用IndexWriter。假设两个线程可能有一个对IndexWriter的引用,如果线程A调用writer上的close,线程B将留下一个无用的writer。但据我所知,lucene以某种方式知道另一个线程使用同一个编写器并推迟其关闭。真的是这样吗?Lucene如何跟踪另一个线程使用编写器?编辑从答案来看关闭IndexWriter是不正确的。但这带来了一个新问题:如果保持IndexWriter打开,基本上会阻止从另一个JVM访问该索引(例如,在集群的情况下,或许多应用程序之间的共享索引)。 最佳答案 如

java - 我可以从实时 JVM 转储当前线程堆栈变量吗?

我需要查看2个死锁线程的堆栈以分析情况。JVM现在是实时的,数据也在那里,但我需要某种工具来从进程中提取它。我只关心String类型的堆栈中的6个变量。非常感谢任何想法。JVM版本6_35,它是一个linux,启用了JMX,但我没有profiler/在其上配置的调试器连接。很难重现。 最佳答案 我发现了一个使用堆转储查看器的小技巧(在本例中是YourKit,但其他人也可以)。基本上你枚举Thread类的所有实例,然后你通过名称找到你想要的线程并打开它。堆栈变量标记为,如下所示:并不是所有的变量都在这里,但是所有作为参数传递给方法的变

java - 为什么将 GC 限制为 1 个线程会提高性能?

我编写了一些简单的Java代码来人为地使用大量RAM,我发现当我使用这些标志时获得相关时间:1029.59seconds....-Xmx8g-Xms256m696.44seconds.....-XX:ParallelGCThreads=1-Xmx8g-Xms256m247.27seconds.....-XX:ParallelGCThreads=1-XX:+UseConcMarkSweepGC-Xmx8g-Xms256m现在,我明白了为什么-XX:+UseConcMarkSweepGC会提高性能,但是为什么当我限制为单线程GC时我会得到加速?这是我写得不好的Java代码的产物,还是这也适

java - 如何从多个线程记录数据?

大量线程连续并行运行(让我们假设这个连续部分)。所有线程都想记录一些应用程序数据,基本上是一组值。记录这些数据的最佳方法是什么?单个/多个文件?备份此日志的最佳方法是什么?从备份文件中读取数据并将其转换为有用的东西的方法是什么?多个线程,如this和this建议使用log4net和log4j,但我想知道实际过程?还有多个线程如何写入同一个日志文件?每个线程都需要文件级锁吗?这一切是如何运作的?任何有助于理解所有细节的指示都将不胜感激。谢谢。 最佳答案 像log4j这样的库将能够根据您的需要进行配置。拆分成太多文件会使调试某些问题变得

java - 如何避免两个不同的线程从数据库中读取相同的行(Hibernate 和 Oracle 10g)

假设我有两个不同的线程,T1和T2,同时访问同一个数据库并从同一个表中获取数据。现在在线程启动时,我需要从表中获取数据并将行存储到一个集合中,然后我将使用它在其他地方执行一些工作。我不希望两个线程能够处理相同的数据,因为这会导致重复(和长时间)的工作。更具体地说,这是一个企业应用程序,需要在启动时加载一些记录并将其存储在一个集合中以执行一些额外的工作。问题在于,在集群环境中,这可能会导致两个不同的实例加载相同的数据,因此可能会重复工作。所以我希望行仅由单个实例加载一次。我怎样才能避免这种情况?我目前正在使用Hibernate和Oracle10g。这些是我到目前为止的解决方案:以编程方式

java - 如何等待产生自己线程的线程?

我正在尝试测试一种在单独的线程中工作的方法,简化后如下所示:publicvoidmethodToTest(){Threadthread=newThread(){@Overridepublicvoidrun(){Clazz.i=2;}};thread.start();}在我的单元测试中,我想测试Clazz.i==2,但我不能这样做,因为我认为断言在线程更改值之前运行。想过换个线程测试一下,然后用join等待,还是不行。中南合作:@Testpublicvoidsscce()throwsInterruptedException{Threadthread=newThread(){@Overri

java - Jetty websocket客户端类WebSocketClient线程安全吗?

jetty9.3Java8org.eclipse.jetty.websocket.client.WebSocketClient线程安全吗。多个线程可以使用此类的单个实例来创建websocketsession(使用connect方法)吗? 最佳答案 不是,来自thecode这里至少有一个例子:WebSocketClient的目的是提供一种与远程websocket端点建立连接的方法。这是通过调用返回FutureSession的connect()方法实现的。好吧,现在想象一下线程1实例化一个WebSocketClient并调用setCoo

java - Erlang 比单线程 Java 快之前需要多少个 CPU

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭9年前。Improvethisquestion我目前正在使用Java,我在网上阅读了很多关于Erlang的内容,但我有两个大问题:Erlang比简单的Java慢多少(如果有的话)?我在这里假设Java会比shootoutbenchmarks更快。在网上(Erlang做的不太好)。那么,我还需要多少CPU才能使Erlang超越单线程Java(在我的特定情况下,如下所示)?在阅读了一段时间关于Erlang的文章后,我偶然发现了一些评论/帖子,它们说大多数

java - 如何在多线程之间共享一个事务

我们遇到了一个使用多线程的场景。在主线程中,做一些逻辑和更新数据库,在某个时刻,它会调用另一个服务来更新数据库,该服务在另一个线程中运行。我们希望两个线程共享同一个事务,也就是说,任何一个线程中的操作失败,那么另一个线程中的操作也会被回滚。但是工作了几天,发现有帖子说JTA不支持多线程。目前我们使用Bitronix作为JTA提供者,有没有人知道Bitronix是否支持一个事务中的多线程?还是有任何其他JTA提供者支持这个(独立的JTA提供者不是J2EE容器)? 最佳答案 “多个线程可能同时与同一个全局事务相关联。”-JTA规范v1.